//
//  XZOAuthViewController.m
//  XZIBeeBo
//
//  Created by Sean on 16/4/6.
//  Copyright © 2016年 XZSean. All rights reserved.
//
//   App Key：206446443
//App Secret：bd2fcda4e6472339619961038f20e962
#define XZURLOAuth @"https://api.weibo.com/oauth2/authorize?client_id=206446443&redirect_uri=http://www.baidu.com"
#define XZURL_ACCESS_TOKEN @"https://api.weibo.com/oauth2/access_token"

#import "XZOAuthViewController.h"
#import "XZAccoutnModel.h"
#import "XZAccoutnTool.h"

@interface XZOAuthViewController ()<UIWebViewDelegate>



@end

@implementation XZOAuthViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    UIWebView *webView = [[UIWebView alloc] init];
    webView.frame = self.view.bounds;
    webView.delegate = self;
    [self.view addSubview: webView];
    
    [webView loadRequest: [NSURLRequest requestWithURL:[NSURL URLWithString:XZURLOAuth]]];
    
    
}
/**
 *  拦截webview所有请求
 */
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
    XZLog(@"Request=%@",request.URL.absoluteString);
    
    //获取URL地址
    NSString *url = request.URL.absoluteString;
    //判断是否为回调地址
    NSRange rang = [url rangeOfString:@"code="];
    if (rang.length != 0 ) {//!=0是回调地址
        NSInteger fromIndex = rang.location + rang.length;
       
        NSString *code = [url substringFromIndex:fromIndex];
        XZLog(@"code=%@",code);
        [self accessTokeWithCode:code];
        //禁止加载回调地址  加载没什么用
        return NO;
    }
    return YES;
}
/**
 *  获取access_token
 */
- (void)accessTokeWithCode:(NSString *)code{
   
    AFHTTPRequestOperationManager *manger = [AFHTTPRequestOperationManager manager];
   // manger.responseSerializer = [AFJSONResponseSerializer serializer];
    
    NSMutableDictionary *parame = [NSMutableDictionary dictionary];
#warning mark----更换key  
     parame[@"client_id"]     = @206446443;
   //  parame[@"client_secret"] = @"bd2fcda4e6472339619961038f20e962";
     parame[@"client_secret"] = @"8706b4800be71ec706ae45b567606148";
 
    parame[@"grant_type"]    = @"authorization_code";
     parame[@"code"]          =  code;
     parame[@"redirect_uri"]  = @"http://www.baidu.com";

    [manger POST:XZURL_ACCESS_TOKEN parameters:parame success:^(AFHTTPRequestOperation * _Nonnull operation, NSDictionary  *responseObject) {
         [SVProgressHUD dismiss];
        XZLog(@"成功%@",responseObject);
        /**
        //将返回的账号信息进行存储到沙盒
        //获取沙盒的Document路径
       NSString *document = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
        NSLog(@"document=%@",document);
        //获取到文件
        NSString *accessDataPata =  [document stringByAppendingPathComponent:@"Access.archiver"];
        //将获取到的数据写入沙盒中
        //将获取到的账号数据转成模型 在存储到沙盒中
        XZAccoutnModel *accountModel = [XZAccoutnModel accoutnModelWithDict:responseObject];
        
        //自定义对象存储必须用NSKeyedArchiver 不在拥有 writeToFile这些方法了/
         [NSKeyedArchiver archiveRootObject:accountModel toFile:accessDataPata];
        //[responseObject writeToFile:accessDataPata atomically:YES];
        */
        //将存储数据的账号模型封装成工具类
        XZAccoutnModel *accoutModel = [XZAccoutnModel accoutnModelWithDict:responseObject];
        [XZAccoutnTool saveAccoutnModel:accoutModel];
        
        //显示新特新
        [UIWindow switchRootViewController];
        
        
    } failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
        XZLog(@"失败%@",error);
         [SVProgressHUD dismiss];
    }];
    
}

#pragma mark---UIWebViewDelegate
- (void)webViewDidStartLoad:(UIWebView *)webView{
    [SVProgressHUD showWithStatus:@"正在加载中..."];
    //XZLog(@"webViewDidStartLoad");
}
- (void)webViewDidFinishLoad:(UIWebView *)webView{
    [SVProgressHUD dismiss];
   // XZLog(@"webViewDidFinishLoad");
}
    
- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error{
    [SVProgressHUD dismiss];
   // XZLog(@"webViewDidFinishLoad");
}
/*
 Oauth2/authorize
 
 oauth2/authorize
 OAuth2的authorize接口
 URL
 https://api.weibo.com/oauth2/authorize
 HTTP请求方式
 GET/POST
 请求参数
 必选	        类型及范围	说明
 client_id	    true	string	申请应用时分配的AppKey。
 redirect_uri	true	string	授权回调地址，站外应用需与设置的回调地址一致，站内应用需填写canvas page的地址。
 scope	        false	string	申请scope权限所需参数，可一次申请多个scope权限，用逗号分隔。使用文档
 state	        false	string	用于保持请求和回调的状态，在回调时，会在Query Parameter中回传该参数。开发者可以用这个参数验证请求有效性，也可以记录用户请求授权页前的位置。这个参数可用于防止跨站请求伪造（CSRF）攻击
 display	    false	string	授权页面的终端类型，取值见下面的说明。
 forcelogin	    false	boolean	是否强制用户重新登录，true：是，false：否。默认false。
 language	    false	string	授权页语言，缺省为中文简体版，en为英文版。英文版测试中，开发者任何意见可反馈至 @微博API
 
 display说明：
 参数取值	类型说明
 default	默认的授权页面，适用于web浏览器。
 mobile	移动终端的授权页面，适用于支持html5的手机。注：使用此版授权页请用 https://open.weibo.cn/oauth2/authorize 授权接口
 wap	wap版授权页面，适用于非智能手机。
 client	客户端版本授权页面，适用于PC桌面应用。
 apponweibo	默认的站内应用授权页，授权后不返回access_token，只刷新站内应用父框架。
 返回数据
 返回值字段	字段类型	字段说明
 code	string	用于第二步调用oauth2/access_token接口，获取授权后的access token。
 state	string	如果传递参数，会回传该参数。
 示例
 //请求
 https://api.weibo.com/oauth2/authorize?client_id=123050457758183&redirect_uri=http://www.example.com/response&response_type=code
 
 //同意授权后会重定向
 http://www.example.com/response&code=CODE

 
 */
/*
 OAuth2/access token
 
 oauth2/access_token
 OAuth2的access_token接口
 URL
 https://api.weibo.com/oauth2/access_token
 HTTP请求方式
 POST
 请求参数
 必选	        类型及范围	说明
 client_id	    true	string	申请应用时分配的AppKey。
 client_secret	true	string	申请应用时分配的AppSecret。
 grant_type	    true	string	请求的类型，填写authorization_code
 
 grant_type为authorization_code时
 必选	类型及范围	说明
 code	        true	string	调用authorize获得的code值。
 redirect_uri	true	string	回调地址，需需与注册应用里的回调地址一致。
 
 返回数据
 {
 "access_token": "ACCESS_TOKEN",
 "expires_in": 1234,
 "remind_in":"798114",
 "uid":"12341234"
 }
 
 返回值字段	字段类型	字段说明
 access_token	string	用户授权的唯一票据，用于调用微博的开放接口，同时也是第三方应用验证微博用户登录的唯一票据，第三方应用应该用该票据和自己应用内的用户建立唯一影射关系，来识别登录状态，不能使用本返回值里的UID字段来做登录识别。
 expires_in	string	access_token的生命周期，单位是秒数。
 remind_in	string	access_token的生命周期（该参数即将废弃，开发者请使用expires_in）。
 uid	string	授权用户的UID，本字段只是为了方便开发者，减少一次user/show接口调用而返回的，第三方应用不能用此字段作为用户登录状态的识别，只有access_token才是用户授权的唯一票据。

 
 */


@end
